package lock;

import java.util.concurrent.locks.Lock;
import java.util.concurrent.locks.ReentrantLock;

/**
 * 简单了解 Lock 接口的使用
 * 
 * 提供与 synchronized 类似的同步功能
 * 对比: 缺少便用性 提供更高的操作性 有许多 synchronized 没有的特性
 * 1. 可中断获取锁
 * 2. 可非阻塞地尝试获取锁
 * 3. 可使用超时机制获取锁
 * 
 * @author insight
 * @since 2021/9/13
 */
public class LockTest {
    public static void main(String[] args) {
        Lock lock = new ReentrantLock();
        int v = 0;

        // 显式地获取锁和释放锁
        // lock.lock() 必须紧跟try代码块，且unlock要放到finally第一行
        lock.lock();
        try {
            ++v;    
        } finally {
            lock.unlock();
        }
    }
}